package com.ning.weixin.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ning.weixin.entity.UserInfo;
import com.ning.weixin.mapper.UserInfoMapper;
import com.ning.weixin.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoMapper mapper;

    /**
     * 根据openId查询用户信息
     *
     * @param openId
     * @return
     */
    @Override
    public UserInfo findUserInfo(String openId) {
        return mapper.findUserInfo(openId);
    }

    /**
     * 更新用户积分
     *
     * @param userInfo
     */
    @Override
    public void updateScore(UserInfo userInfo) {
        //1.如果用户进行线上打卡，则需要判断线上打卡次数是否大于0，如果大于0则可以进行线上打卡
        //2.如果用户进行线下打卡，则需要判断线下打卡次数是否大于0，如果大于0则可以进行线下打卡
        //3.查询客户原本就有的积分
        //4.原有积分与打卡获得的积分进行相加得出新的积分数目
        //5.将新积分存入数据库
        if (userInfo != null) {
            mapper.updateScore(userInfo);
        }
    }

    /**
     * 保存用户基本信息
     * 主要是用户openId,昵称,头像,userId,创建时间
     *
     * @param userInfo
     */
    @Override
    public void saveUserInfo(UserInfo userInfo) {
        if (userInfo != null) {
            mapper.saveUserInfo(userInfo);
        }
    }

    /**
     * 更新用户真实姓名和电话
     *
     * @param userInfo
     */
    @Override
    public void updateNameAndTel(UserInfo userInfo) {
        if (userInfo != null) {
            mapper.updateNameAndTel(userInfo);
        }
    }

    /**
     * 分享后用户分享状态变为1
     * 此后不再做任何改变
     *
     * @param userInfo
     */
    @Override
    public void updateShareStatus(UserInfo userInfo) {
        if (userInfo != null) {
            mapper.updateShareStatus(userInfo);
        }
    }

    /**
     * 线上打卡次数减去1
     *
     * @param userInfo
     */
    @Override
    public void subClockNum(UserInfo userInfo) {
        if (userInfo != null) {
            mapper.subClockNum(userInfo);
        }
    }

    /**
     * 线下打卡次数减去1
     *
     * @param downClockNum
     * @param openId
     */
    @Override
    public void subDownClockNum(Integer downClockNum, String openId) {
        if (downClockNum != null && openId != null) {
            mapper.subDownClockNum(downClockNum, openId);
        }
    }

    @Override
    public PageInfo<Map<String, Object>> getScoreRank(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<Map<String, Object>> scorelist = mapper.getScoreRank();
        PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(scorelist);
        return pageInfo;
    }

    @Override
    public Integer scoreRanking(String openId) {
        if (openId != null){
            Integer rank = mapper.scoreRanking(openId);
            return rank;
        }else {
            return null;
        }
    }

    @Override
    public List<UserInfo> selectUserInfo() {
        return mapper.selectUserInfo();
    }

}
